const fs = require("fs");
const path = require("path");
const { createHash } = require("crypto");

/**
 * 根据文件夹路径，清空该文件夹中的内容，不删除该文件夹自身
 * @param {string} folderPath - 文件夹路径
 */
function deleteFolderRecursive(folderPath) {
  if (fs.existsSync(folderPath)) {
    fs.readdirSync(folderPath).forEach((file, index) => {
      const curPath = path.join(folderPath, file);
      if (fs.lstatSync(curPath).isDirectory()) {
        // 如果是目录，递归删除
        deleteFolderRecursive(curPath);
      } else {
        // 如果是文件，直接删除
        fs.unlinkSync(curPath);
      }
    });
    // fs.rmdirSync(folderPath); // 删除空目录
  }
}

/**
 * 根据路径删除文件夹
 *
 * @param {string} folderPath
 * @param {boolean} deleteSelf 默认false，false只清空目录下的所有内容，true删除自身，
 */
function deleteDirectory(folderPath, deleteSelf = false) {
  if (fs.existsSync(folderPath)) {
    fs.readdirSync(folderPath).forEach((file, index) => {
      const curPath = path.join(folderPath, file);
      if (fs.lstatSync(curPath).isDirectory()) {
        // 如果是目录，递归删除
        deleteFolderRecursive(curPath);
      } else {
        // 如果是文件，直接删除
        fs.unlinkSync(curPath);
      }
    });
    deleteSelf && fs.rmdirSync(folderPath); // 删除自身
  }
}

/**
 * 根据路径创建文件夹
 * @param {string} folderPath - 要创建的文件夹绝对路径
 */
function makeFolde(folderPath) {
  if (!fs.existsSync(folderPath)) {
    fs.mkdirSync(folderPath, { recursive: true });
  }
}

/**
 * 使用MD5算法生成base64url
 *
 * @param {string} str 字符串
 * @returns string base64url格式的字符串
 */
function md5(str) {
  return createHash("md5").update(str).digest("base64url");
}

module.exports = {
  deleteDirectory: deleteFolderRecursive,
  deleteDirectory,
  makeFolde,
  md5,
};
